package com.nnnu.orange.controller.admin;

import cn.hutool.core.bean.BeanUtil;
import com.nnnu.orange.constant.MessageConstants;
import com.nnnu.orange.pojo.dto.CategoriesQueryDto;
import com.nnnu.orange.pojo.dto.CategoryDto;
import com.nnnu.orange.pojo.entity.Categories;
import com.nnnu.orange.result.PageResult;
import com.nnnu.orange.result.Result;
import com.nnnu.orange.service.ICategoriesService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;

import java.util.List;
import java.util.Map;

/**
 * <p>
 * 存储图书类别信息 前端控制器
 * </p>
 *
 * @author zk
 * @since 2024-11-07
 */
@RestController("adminCategoriesController")
@RequestMapping("/admin/categories")
@Slf4j
@RequiredArgsConstructor
@Api(tags = "管理端图书分类相关接口")
public class CategoriesController {


    private final ICategoriesService iCategoriesService;


    /**
     * 新增图书分类
     *
     * @param categoryDto 图书分类 DTO 对象
     * @return 提示
     */
    @PostMapping
    @ApiOperation("新增图书分类")
    public Result<String> save(@RequestBody CategoryDto categoryDto) {
        log.info("新增图书分类:{}", categoryDto);
        iCategoriesService.save(categoryDto);
        return Result.success(MessageConstants.ADD_OK);
    }


    /**
     * 获取图书分类详细信息
     *
     * @param id 图书分类id
     * @return 图书分类实体
     */
    @GetMapping("/{id}")
    @ApiOperation("获取图书分类详细信息")
    public Result<Categories> getOne(@PathVariable Integer id) {
        log.info("获取图书分类详细信息:{}", id);
        return Result.success(iCategoriesService.getById(id), MessageConstants.SELECT_OK);
    }


    /**
     * 修改图书分类
     *
     * @param categoryDto 图书分类dto
     * @return 提示
     */
    @PutMapping()
    @ApiOperation("修改图书分类")
    public Result<String> update(@RequestBody CategoryDto categoryDto) {
        log.info("修改图书分类:{}", categoryDto);
        iCategoriesService.update(categoryDto);
        return Result.success(MessageConstants.OPERATION_SUCCESSFUL);
    }

    /**
     * 批量删除图书分类
     *
     * @param ids 分类ids
     * @return 提示
     */
    @DeleteMapping()
    @ApiOperation("批量删除图书分类")
    public Result<String> deleteBatch(@RequestParam List<Integer> ids) {
        log.info("批量删除图书分类:{}", ids);
        return Result.success(iCategoriesService.deleteBatch(ids) ? MessageConstants.OPERATION_SUCCESSFUL : MessageConstants.DELETE_FAILED + "分类id不存在");
    }


    /**
     * 分页获取图书分类列表
     *
     * @param queryDto dto
     * @return 分页后的dto
     */
    @GetMapping
    @ApiOperation("分页获取图书分类列表")
    public Result<PageResult<Categories>> list(CategoriesQueryDto queryDto) {
        log.info("分页获取图书分类列表:{}", queryDto);
        return Result.success(iCategoriesService.list(queryDto), MessageConstants.SELECT_OK);
    }


    /**
     * 统计每个分类下的图书数量
     *
     * @return 分类统计列表
     */
    @GetMapping("/statistics")
    @ApiOperation("统计分类下的图书数量")
    public Result<Map<String, Long>> getCategoryStatistics() {
        log.info("获取分类下的图书数量统计");
        Map<String, Long> statistics = iCategoriesService.getCategoryStatistics();
        return Result.success(statistics, MessageConstants.SELECT_OK);
    }
}
